home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / netscape / plugin / composer / io / SlidingBuffer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  2.7 KB  |  241 lines

  1. package netscape.plugin.composer.io;
  2.  
  3. import java.io.IOException;
  4. import java.io.Reader;
  5.  
  6. class SlidingBuffer extends Reader {
  7.    static final int DEFAULT_BUFFER_LENGTH = 4096;
  8.    // $FF: renamed from: in java.io.Reader
  9.    protected Reader field_0;
  10.    protected char[] buffer;
  11.    protected int offset;
  12.    protected int end;
  13.  
  14.    public SlidingBuffer(Reader var1) {
  15.       this.field_0 = var1;
  16.       this.buffer = new char[4096];
  17.    }
  18.  
  19.    public SlidingBuffer(Reader var1, int var2) {
  20.       this.field_0 = var1;
  21.       if (var2 < 4096) {
  22.          var2 = 4096;
  23.       }
  24.  
  25.       this.buffer = new char[var2];
  26.    }
  27.  
  28.    public int read() throws IOException {
  29.       int var1 = this.end - this.offset;
  30.       if (var1 == 0 && !this.fill()) {
  31.          return -1;
  32.       } else {
  33.          char var2 = this.buffer[this.offset++];
  34.          return var2;
  35.       }
  36.    }
  37.  
  38.    public int read(char[] var1) throws IOException {
  39.       int var2 = this.end - this.offset;
  40.       if (var2 == 0 && !this.fill()) {
  41.          return -1;
  42.       } else {
  43.          var2 = this.end - this.offset;
  44.          if (var2 > var1.length) {
  45.             var2 = var1.length;
  46.          }
  47.  
  48.          System.arraycopy(this.buffer, this.offset, var1, 0, var2);
  49.          this.offset += var2;
  50.          return var2;
  51.       }
  52.    }
  53.  
  54.    public int read(char[] var1, int var2, int var3) throws IOException {
  55.       int var4 = this.end - this.offset;
  56.       if (var4 == 0 && !this.fill()) {
  57.          return -1;
  58.       } else {
  59.          var4 = this.end - this.offset;
  60.          if (var4 > var3) {
  61.             var4 = var3;
  62.          }
  63.  
  64.          System.arraycopy(this.buffer, this.offset, var1, var2, var4);
  65.          this.offset += var4;
  66.          return var4;
  67.       }
  68.    }
  69.  
  70.    public long skip(long var1) throws IOException {
  71.       int var3 = this.end - this.offset;
  72.       if ((long)var3 >= var1) {
  73.          this.offset = (int)((long)this.offset + var1);
  74.          return var1;
  75.       } else {
  76.          this.offset = 0;
  77.          this.end = 0;
  78.          return (long)var3 + this.field_0.skip(var1 - (long)var3);
  79.       }
  80.    }
  81.  
  82.    public int peek() throws IOException {
  83.       int var1 = this.end - this.offset;
  84.       if (var1 == 0 && !this.fill()) {
  85.          return -1;
  86.       } else {
  87.          char var2 = this.buffer[this.offset];
  88.          return var2;
  89.       }
  90.    }
  91.  
  92.    public void unread(int var1) throws IOException {
  93.       if (this.offset < var1) {
  94.          throw new IOException("invalid unread; offset=" + this.offset + " count=" + var1);
  95.       } else {
  96.          this.offset -= var1;
  97.       }
  98.    }
  99.  
  100.    public boolean lookAhead(char var1) throws IOException {
  101.       int var2 = this.end - this.offset;
  102.       if (var2 == 0 && !this.fill()) {
  103.          return false;
  104.       } else if (this.buffer[this.offset] == var1) {
  105.          ++this.offset;
  106.          return true;
  107.       } else {
  108.          return false;
  109.       }
  110.    }
  111.  
  112.    public boolean lookAhead(String var1) throws IOException {
  113.       return this.lookAhead(var1, false);
  114.    }
  115.  
  116.    public boolean lookAhead(String var1, boolean var2) throws IOException {
  117.       int var3 = var1.length();
  118.       int var4 = this.end - this.offset;
  119.       if (var4 < var3 && !this.fillForCapacity(var3)) {
  120.          return false;
  121.       } else {
  122.          for(int var5 = 0; var5 < var3; ++var5) {
  123.             char var6 = this.buffer[this.offset + var5];
  124.             char var7 = var1.charAt(var5);
  125.             if (var2) {
  126.                var6 = Character.toLowerCase(var6);
  127.                var7 = Character.toLowerCase(var7);
  128.             }
  129.  
  130.             if (var6 != var7) {
  131.                return false;
  132.             }
  133.          }
  134.  
  135.          this.offset += var3;
  136.          return true;
  137.       }
  138.    }
  139.  
  140.    public boolean eatWhiteSpace() throws IOException {
  141.       boolean var1 = false;
  142.  
  143.       do {
  144.          for(int var2 = this.offset; var2 < this.end; ++var2) {
  145.             char var3 = this.buffer[var2];
  146.             if (var3 != ' ' && var3 != '\t' && var3 != '\r' && var3 != '\n' && var3 != '\f') {
  147.                this.offset = var2;
  148.                return var1;
  149.             }
  150.  
  151.             var1 = true;
  152.          }
  153.       } while(this.fill());
  154.  
  155.       return var1;
  156.    }
  157.  
  158.    public boolean eatNewline() throws IOException {
  159.       boolean var1 = false;
  160.       int var2 = this.end - this.offset;
  161.       if (var2 < 2 && !this.fillForCapacity(2)) {
  162.          if (this.end - this.offset == 0) {
  163.             return false;
  164.          } else if (this.buffer[this.offset] != '\r' && this.buffer[this.offset] != '\n') {
  165.             return false;
  166.          } else {
  167.             ++this.offset;
  168.             return true;
  169.          }
  170.       } else {
  171.          if (this.buffer[this.offset] == '\r') {
  172.             ++this.offset;
  173.             var1 = true;
  174.          }
  175.  
  176.          if (this.buffer[this.offset] == '\n') {
  177.             var1 = true;
  178.             ++this.offset;
  179.          }
  180.  
  181.          return var1;
  182.       }
  183.    }
  184.  
  185.    protected boolean fill() throws IOException {
  186.       if (this.end - this.offset != 0) {
  187.          throw new IOException("fill of non-empty buffer");
  188.       } else {
  189.          this.offset = 0;
  190.          this.end = this.field_0.read(this.buffer, 0, this.buffer.length);
  191.          if (this.end < 0) {
  192.             this.end = 0;
  193.             return false;
  194.          } else {
  195.             return true;
  196.          }
  197.       }
  198.    }
  199.  
  200.    protected boolean fillForCapacity(int var1) throws IOException {
  201.       int var2 = this.end - this.offset;
  202.       if (var2 >= var1) {
  203.          return true;
  204.       } else {
  205.          if (var1 >= this.buffer.length) {
  206.             int var3 = this.buffer.length * 2;
  207.             if (var3 < var1) {
  208.                var3 = var1;
  209.             }
  210.  
  211.             char[] var4 = new char[var3];
  212.             System.arraycopy(this.buffer, this.offset, var4, 0, var2);
  213.             this.offset = 0;
  214.             this.end = var2;
  215.             this.buffer = var4;
  216.          } else if (var2 != 0) {
  217.             System.arraycopy(this.buffer, this.offset, this.buffer, 0, var2);
  218.             this.offset = 0;
  219.             this.end = var2;
  220.          }
  221.  
  222.          int var5 = var1 - var2;
  223.          int var6 = this.field_0.read(this.buffer, this.offset, this.buffer.length - this.offset);
  224.          if (var6 < var5) {
  225.             if (var6 > 0) {
  226.                this.end += var6;
  227.             }
  228.  
  229.             return false;
  230.          } else {
  231.             this.end += var6;
  232.             return true;
  233.          }
  234.       }
  235.    }
  236.  
  237.    public void close() throws IOException {
  238.       this.field_0.close();
  239.    }
  240. }
  241.